DirectPlay Notes:

1. What's New!
--------------

See the DirectPlay section in the DirectX help file for more details
on what's new.

Highlights include:

 - IDirectPlayLobby - an interface that allows an external application
   to launch a DirectPlay 3.0 application and provide it with all the
   connection information needed to get connected to a session.
   Try out the DPLAUNCH sample application for a demo of this!

 - Internet TCP/IP service provider - now you can have multiplayer
   applications over the Internet

 - Unicode support

 - Host migration

 - Automatic player data propagation

 - Better performance, less overhead, more stability and robustness

 - Support for 3rd-party network service providers

All the new functionality of DirectPlay is in the IDirectPlay2
(Unicode) and IDirectPlay2A (ANSI) interfaces. When compiling, it is
recommended that you define the symbol IDIRECTPLAY2_OR_GREATER to make
sure that you are not using any obsolete flags or structures. The
IDirectPlay interface has not changed from previous versions of
DirectPlay.


2. Samples
----------
   The following samples can be examined for examples of how to use
   DirectPlay

   SDK/SAMPLES/DUEL
   - This simple multiplayer game uses the new IDirectPlay2 interface
   - It also uses IDirectPlayLobby to make it lobby-able

   SDK/SAMPLES/DPLAUNCH
   - This stand-alone application demonstrates how a DirectPlay 3 app
     can be launched from an external source using the IDirectPlayLobby
     interface

   SDK/SAMPLES/IKLOWNS
   - Another multiplayer game which still uses the old IDirectPlay
     interface
   - It also use IDirectPlayLobby to make it lobby-able

3. General Notes
----------------

-- The names of the DirectPlay 3 DLLs have changed. The names of the
   new DLLs are:

   dplayx.dll - DirectPlay 3 dll
   dpwsockx.dll - Winsock service provider (TCP/IP and IPX)
   dpmodemx.dll - modem and serial service provider.

   Make sure that any applications in development link to DPLAYX.LIB.

   Applications compiled with DirectPlay 2 or earlier will not use these
   new DLLs and therefore not benefit from the enhancements of DirectPlay 3.

   *** If you installed Beta1 of DirectX 3, the DirectPlay 3 DLLs will
   have overwritten any DirectPlay 2 DLLs you may have had installed.
   Beta2 will delete these DLLs if they have the version number of
   DirectX 3 (4.04.xxxx)

   *** To restore them, simply reinstall DirectX 2 or any game that uses
   DirectX 2. Alternatively, copy the files DPLAY.DLL, DPWSOCK.DLL and
   DPSERIAL.DLL from your DirectX 2 CD to the windows SYSTEM directory.

-- The synchronization event parameter in IDirectPlay2::CreatePlayer has
   been changed to a HANDLE (from an LPHANDLE).  The handle must be
   created by the application.  Passing in an LPHANDLE will NOT generate
   a compiler error but it will cause the method to return an error.

-- Make sure you read and understand the behavior of the DPSEND_GUARANTEED
   flag in the Send() API.  Additional text has been added to clarify the
   usage of this flag.

-- The Internet TCP/IP service provider now maintains a cache of open
   sockets to improve the performance of guaranteed messages i.e. sockets
   will not be opened and closed for each individual message.  Calling
   GetCaps() and asking for the guaranteed capabilities will tell you
   how many players can be supported (dwMaxPlayers).

-- If an application tries to send messages that are larger than the
   maximum packet size of a protocol, DirectPlay will break it up
   and send it using multiple packets and reassembling the packets on
   the receiving end into a single message.

-- Added ability to host more than one game on a single machine (TCP/IP only)

-- The DirectPlay Address structure now uses GUIDs to identify chunks
   in the address instead of four character codes.

-- Applications with short timeouts will not work over the Internet
   due to the long latencies.  Applications should specify a timeout value
   of zero in EnumSessions in which case an appropriate timeout will
   be calculated by the service provider.

-- DirectPlayConnect is obsolete.  An application will need to create an
   IDirectPlayLobby interface.  It may query the connection settings that
   the lobby passed in using GetConnectionSettings, and modify them using
   SetConnectionSettings.  It highly recommended that the application
   verify that the correct session description flags are set using this
   method.  Finally, the application should call the Connect method and
   then Release the IDirectPlayLobby interface.

-- There is now an ANSI and a UNICODE version of the DirectPlayLobbyCreate
   API. The version is selected based on the UNICODE compile-time flag.

-- To use TCP/IP over the Internet, the users joining the session must
   enter the IP address of the machine that hosted the game when prompted
   by the service provider.

   You can find out the IP address of your machine by running "winipcfg".
   If you have a net card and a modem installed, you will need to make
   sure you read the IP address of the modem connection to the Internet.
   The IP address information for the modem will typically show up under
   "PPP Adapter".

4. Known Problems
-----------------

-- Inside of any DirectPlay enumeration callback only the thread running
   the callback can make calls back into the DirectPlay API. Other threads
   and the service provider will be blocked from calling DirectPlay until
   the enumeration has completed, so it is important to have enumeration
   callbacks complete quickly.

-- IPX will not allow playing more than one game simultaneously.  Use
   TCP/IP to do that.

-- There is no multi-home support for IPX.  Use TCP/IP if multi-homing
   is needed.

-- If an application sets the player name or remote data for a non-local
   player, the change will not be propagated to the remote applications.

-- DirectPlay generally will not work through proxies and firewalls.
